//
//  MAAppInfo.h
//  MiniAppSDK
//
//  Created by Tom on 2019/1/8.
//

#import <Foundation/Foundation.h>
#import "QQModelObject.h"

@class MABaseApplication;
@class NS_COMM_Entry;
@class trpc_mini_app_config_SubPkgInfo;
@class NS_MINI_INTERFACE_MiniGameBox;

/*
 * 平台渠道，8811新增支持微信小程序SDK
 */
typedef NS_ENUM(int32_t, QMAChannelType) {    //渠道类型，QQ，微信
    QMAChannelQQ = 0, //QQ
    QMAChannelWX = 1, //微信
};

/**
 商业范畴的类目类型,小程序或者小游戏
 
 - QMABrandTypeApp: 小程序
 - QMABrandTypeGame: 小游戏
 来源于 mini_meta_protocol.proto, StApiAppInfo ,appType
 后台、前端仍然叫appType，但客户端之前的语义更偏向引擎，因此废弃，重新取名brandType，以表示商业上的分类。
 */
typedef NS_ENUM(int32_t, QMABrandType) {    //类目类型，商业范畴
    QMABrandTypeApp = 0,
    QMABrandTypeGame = 1,
};

/*
 * 预加载 数据类型
 */
typedef NS_ENUM(NSInteger, QMAPreCacheType) {
    QMAPreCacheTypeOld = 0,  // 旧的cache, 商店在使用
    QMAPreCacheTypePre = 1, // 预加载数据
    QMAPreCacheTypePeriodic = 2, // 周期加载数据
};


/**
技术范畴的引擎类型,小程序或者小游戏

- QMAPackageTypeApp: 小程序
- QMAPackageTypeGame: 小游戏
来源于 mini_interface.proto, StAppBasicInfo, pkgType
*/
typedef NS_ENUM(NSUInteger, QMAPackageType) {    //引擎类型，技术范畴
    QMAPackageTypeGame = 1,
    QMAPackageTypeApp = 2,
};

// 二级API权限枚举定义 0：未知，1：有权限，-1：没有权限 来源于：mini_interface.proto
typedef NS_ENUM(NSInteger, QMASecondaryApiAuth) {
    QMASecondaryApiAuthDeny     = -1, // 没有权限
    QMASecondaryApiAuthUnknown  = 0, // 未知
    QMASecondaryApiAuthAllow    = 1, // 有权限
};

/**
 游戏盒子红点类型

- QMAFloatingBoxRedDotTypeTianshu: 天枢下发投放红点
- QMAFloatingBoxRedDotTypeGift: 游戏礼包提醒红点
来源于 mini_interface.proto, MiniGameBoxRedDot, souce
*/
typedef NS_ENUM(int32_t, QMAFloatingBoxRedDotType) {
    QMAFloatingBoxRedDotTypeUnknown = 0,
    QMAFloatingBoxRedDotTypeTianshu = 1,
    QMAFloatingBoxRedDotTypeGift = 2,
};


@interface MAAppDataCache : QQModelObject

@property (nonatomic, strong) NSString *wnsCgiUrl;
@property (nonatomic, strong) NSString *cacheKey;

@end

@interface MASubPkgInfo : QQModelObject

@property (nonatomic, strong) NSString *subPkgName;
@property (nonatomic, strong) NSString *dowLoadUrl;
@property (nonatomic, assign) NSInteger independent;
@property (nonatomic, assign) NSInteger file_size;
@property (nonatomic, strong) NSString *version;
@property (nonatomic, strong) NSString *versionId;
@property (nonatomic, strong) NSString *mainPackVersion;
@property (nonatomic, strong) NSString *subPkgType;
@property (nonatomic, strong) NSString *prefetchConfig;

@end

@interface MAFirstPageInfo : QQModelObject

@property (nonatomic, strong) NSString *pagePath;
@property (nonatomic, strong) NSString *subPkgName;

@end

@interface MADebugInfo : NSObject

@property (nonatomic, strong) NSString *roomId;
@property (nonatomic, strong) NSString *wsUrl;
@property (nonatomic, strong) NSString *sessionId;

- (BOOL)isValid;

@end

@interface MAAppMode : QQModelObject

@property (nonatomic, assign) BOOL interMode;
@property (nonatomic, assign) BOOL authoritySilent;
@property (nonatomic, assign) BOOL keepOffPullList;
@property (nonatomic, assign) BOOL closeTopRightCapsule;
@property (nonatomic, assign) BOOL openNativeApi;
@property (nonatomic, assign) BOOL hideAppSearch;
@property (nonatomic, assign) BOOL isAppStore;
@property (nonatomic, assign) BOOL isKingCard;
@property (nonatomic, assign, getter=isInterLoading) BOOL interLoading;
@property (nonatomic, assign) BOOL closeWebviewBounce;
@property (nonatomic, assign) BOOL isLimitedAccess; // 是否限制：1. 添加到我的，2. 添加到彩签，3. 保存到桌面

// http://tapd.oa.com/QYY/prong/stories/view/1020394322862900475
// 8.6.0 对 isAppStore 语义控制的多个开关进行拆分重定义如下，原 isAppStore 对 8.6.0 及以后版本废弃
@property (nonatomic, assign) BOOL useAppInfoWhenNavigate;// true navigateToMiniProgram 会使用参数里传入的appInfo, false 不会使用
@property (nonatomic, assign) BOOL disableAddToMyApp; // true 不允许添加到"我的小程序" false 允许添加到"我的小程序"
@property (nonatomic, assign) BOOL disableAddToMyFavor; // true 不允许添加到我的收藏, false 允许添加到我的收藏
@property (nonatomic, assign) BOOL reloadWithFirstPageChange; // true 热启动时，firstPage不同才会触发重新加载, false 正常的热启动是有firstPage就触发重新加载ge;
@property (nonatomic, assign) BOOL unlimitedApiRight; // true 调用任何api无限制, false 限制
@property (nonatomic, assign) BOOL disableShareToAIO; // true 不允许分享到aio false 允许分享到aio
@property (nonatomic, assign) BOOL disableShareToQZone; // true 不允许分享到空间 false 允许分享到空间
@property (nonatomic, assign) BOOL disableShareToWeChat; // true 不允许分享到微信 false 允许分享到微信
@property (nonatomic, assign) BOOL disableShareToGuild; // true 不允许分享到频道选项前置 false 允许分享到频道选项前置
@property (nonatomic, assign) BOOL disableCloseRecommandAlert; // 默认开启关闭时的推荐弹窗
@property (nonatomic, assign) BOOL disableFloatingBox; // 默认开启显示更多悬浮入口
@property (nonatomic, assign) BOOL disableBubbleAd; // 默认开启气泡广告
@property (nonatomic, assign) BOOL disableHeartbeat;   // 默认开启心跳脉冲
@property (nonatomic, assign) BOOL shouldTerminateOnClose;   // 是否关闭时退出应用
@property (nonatomic, assign) BOOL disableScreenRecordGuide;   // 屏蔽录屏引导
@property (nonatomic, assign) BOOL supportAutoRotate;   // 是否支持自由旋转
@property (nonatomic, assign) BOOL closeLaunchLoadingByJs; // 是否又js端控制隐藏启动页面loading
@property (nonatomic, assign) BOOL needLaunchLoadSuccessAnimation; // 是否需要启动页结束动画
@property (nonatomic, assign) BOOL disableHotLaunch; // 默认为开启热启动
@property (nonatomic, strong) NSNumber *defaultNavTextStyle; // 默认为空

// 是否隐藏胶囊按钮, 默认不隐藏（NO）
- (BOOL)shouldHideTopRightBtn;

// 是否不添加到下拉列表, 默认添加（NO）
- (BOOL)shouldKeepOffPullList;

// 是否静默模式，默认弹框(NO), 静默模式不弹框
- (BOOL)shouldAuthoritySilent;

@end

@interface MAOperationInfo : QQModelObject

@property (nonatomic, strong) NSString *reportData;
@property (nonatomic, strong) NSString *amsAdInfo;
@property (nonatomic, assign) uint32_t tianshuAdId;
@property (nonatomic, strong) NSString *adExposureReportUrl;
@property (nonatomic, strong) NSMutableDictionary *adClickMap;

@end

@interface MAPerformanceInfo : QQModelObject

// 毫秒单位
@property (nonatomic, assign) NSTimeInterval navigationStart;           // 点击时间
@property (nonatomic, assign) NSTimeInterval serviceStart;              // 开始创建service的时间
@property (nonatomic, assign) NSTimeInterval serviceEnd;                // 结束创建service的时间
@property (nonatomic, assign) NSTimeInterval viewStart;                 // 开始创建webview时间
@property (nonatomic, assign) NSTimeInterval viewEnd;                   // 结束创建webview时间
@property (nonatomic, assign) NSTimeInterval fetchPkgStart;             // 开始下载代码包的时间
@property (nonatomic, assign) NSTimeInterval fetchPkgEnd;               // 结束下载代码包的时间
@property (nonatomic, assign) NSTimeInterval fetchSdkStart;             // 开始下载基础库的时间
@property (nonatomic, assign) NSTimeInterval fetchSdkEnd;               // 结束下载基础库的时间
@property (nonatomic, assign) NSTimeInterval loadSdkServiceStart;       // 开始加载QLogic.js的时间
@property (nonatomic, assign) NSTimeInterval loadSdkServiceEnd;         // 结束加载QLogic.js的时间
@property (nonatomic, assign) NSTimeInterval loadSdkViewStart;          // 开始加载QView.js的时间
@property (nonatomic, assign) NSTimeInterval loadSdkViewEnd;            // 结束加载QView.js的时间
@property (nonatomic, assign) NSTimeInterval loadAppServiceStart;       // 开始加载小程序视图层代码时间
@property (nonatomic, assign) NSTimeInterval loadAppServiceEnd;         // 结束加载小程序视图层代码时间 （onLoad和onShow大致发生在这里，开发者自行在回调函数里获取时间戳）
@property (nonatomic, assign) NSTimeInterval loadAppViewStart;          // 开始加载小程序视图层代码时间
@property (nonatomic, assign) NSTimeInterval loadAppViewEnd;            // 结束加载小程序视图层代码时间 （generateFuncReady事件）
/// 切换Tab开始
@property (nonatomic, assign) NSTimeInterval switchTabStart;
/// 切换Tab结束
@property (nonatomic, assign) NSTimeInterval switchTabEnd;
/// 打开页面开始
@property (nonatomic, assign) NSTimeInterval redirectToStart;
/// 打开页面结束
@property (nonatomic, assign) NSTimeInterval redirectToEnd;
/// 打开新页面开始
@property (nonatomic, assign) NSTimeInterval navigateToStart;
/// 打开新页面结束
@property (nonatomic, assign) NSTimeInterval navigateToEnd;
/// 回退开始
@property (nonatomic, assign) NSTimeInterval navigateBackStart;
/// 回退结束
@property (nonatomic, assign) NSTimeInterval navigateBackEnd;
/// 启动小程序开始
@property (nonatomic, assign) NSTimeInterval reLaunchStart;
/// 启动小程序结束
@property (nonatomic, assign) NSTimeInterval reLaunchEnd;
/// 小程序启动开始
@property (nonatomic, assign) NSTimeInterval appLaunchStart;
/// 小程序启动结束
@property (nonatomic, assign) NSTimeInterval appLaunchEnd;
/// 逻辑层 JS 代码注入开始
@property (nonatomic, assign) NSTimeInterval evaluateScriptStart;
/// 逻辑层 JS 代码注入结束
@property (nonatomic, assign) NSTimeInterval evaluateScriptEnd;

- (NSDictionary<NSString *, NSNumber *> *)performanceDict;

@end

@interface MAAppInfoTemporaryInfo : NSObject

@property (nonatomic, assign) BOOL needDownloadPackage;                 // 记录是否下载资源包，用于启动耗时上报
@property (nonatomic, assign) NSInteger apkgDownloadCode;               // apkg下载错误码，0为成功
@property (nonatomic, assign) CFTimeInterval apkgDownloadTime;          // 单位秒

// DC04266报表的reverse1 ～ reverse4
@property (nonatomic, strong) NSString *baseLibState;                   // 是否已经下载基础库 "baselib_not_download" "baselib_download"
@property (nonatomic, strong) NSString *apkgState;                      // 是否已经下载小程序包 "apkg_not_download" "apkg_download"
@property (nonatomic, strong) NSString *serviceState;                   // 基础库是否预启动 "service_not_preload" "service_preload"
@property (nonatomic, strong) NSString *launchState;                    // 冷热启动 "cold_start" "hot_start"

// qq.getPerformance
@property (nonatomic, strong, readonly) MAPerformanceInfo *coldStartPerformanceInfo;
@property (nonatomic, strong, readonly) MAPerformanceInfo *hotStartPerformanceInfo;
@property (nonatomic, strong, readonly) MAPerformanceInfo *currentPerformanceInfo;

- (BOOL)isColdStart;

@end

@interface QMAAppFixInfoExt : QQModelObject

@property (nonatomic, assign) BOOL needClearAuths;

@end

@interface QMAAppPreCacheInfo : QQModelObject
@property (nonatomic, strong) NSString *url;
@property (nonatomic, strong) NSString *preCacheKey;
@property (nonatomic, assign) int64_t expireInterval;
// 0：之前商店使用的预拉取，1：为普通开发者预拉取数据，需要拼接参数 2.周期性数据
@property (nonatomic, assign) QMAPreCacheType cacheType;
// 拉取数据时是否使用代理
@property (nonatomic, assign) int32_t useProxy;

@end

@interface QMAAppResourcePreCacheInfo : QQModelObject

// 拉取数据的https请求地址
@property (nonatomic, strong) NSString *url;

@end


//小游戏相关扩展结构
@interface QMAAppGameInfoExt : QQModelObject
@property (nonatomic, assign) BOOL needCloseApplication;

@end

//小游戏引擎插件信息
@interface QMAAppPluginInfo : QQModelObject
@property (nonatomic, strong) NSString *pluginId;
@property (nonatomic, strong) NSString *pluginName;
@property (nonatomic, strong) NSString *version;
@property (nonatomic, strong) NSString *url;
@property (nonatomic, assign) NSInteger fileSize;
@end

@interface QMAAppIDEConfigInfo : QQModelObject

@property (nonatomic, copy) NSString *scene; // IDE 配置的场景值
@property (nonatomic, copy) NSString *extraAppId; // 来源appid，用来模拟从其他应用呼起当前调试应用
@property (nonatomic, copy) NSString *extraData; // 模拟从其他应用呼起当前调试应用时，附带的信息

@end

@interface QMAGamePublicationInfo : QQModelObject

@property (nonatomic, copy) NSString *gamePublicationNumber;// 出版号
@property (nonatomic, copy) NSString *gamePublicationCommpany;// 出版单位
@property (nonatomic, copy) NSString *gameApprovalNumber;// 批准文号
@property (nonatomic, copy) NSString *gameOperatingCompany;// 运营单位名称

@end

@interface QMAAppBasicInfo : QQModelObject
@property (nonatomic, strong) NSString *operationTags;
@property (nonatomic, assign) int64_t usrFileSizeLimit;
@property (nonatomic, strong) NSArray<QMAAppPreCacheInfo *> *preCacheList;
@property (nonatomic, assign) NSUInteger versionUpdateTime;
@property (nonatomic, assign) NSInteger noNeedRealRecommend;
@property (nonatomic, strong) QMAAppPluginInfo *pluginInfo;
@property (nonatomic, assign) QMAPackageType pkgType;    //引擎类型
@property (nonatomic, copy) NSString *qualificationInfo;  //Loading页展示的额外信息
@property (nonatomic, strong) NSString *gameCopyrightInfo; //loading页小游戏资质信息
@property (nonatomic, strong) NSString *via;//用于运营相关的数据
@property (nonatomic, strong) NSString *shareId;  //定向分享需要的分享id，调用modifyFriendInteractiveStorage使用
@property (nonatomic, strong) QMAAppIDEConfigInfo *ideConfigInfo;
@property (nonatomic, strong) QMAGamePublicationInfo *gamePublicationInfo; // 版号信息
@property (nonatomic, strong) NSArray<QMAAppResourcePreCacheInfo *> *resPreCacheList;
@property (nonatomic, assign) BOOL isSupportSplashScreenAd; //是否接了闪屏广告
@property (nonatomic, strong) NSString *traceId; // 数据上报的前项来源标识id
@property (nonatomic, strong) NSString *slotId; // 数据上报的槽位id

@end

//主包附加信息，主要是包大小。
@interface MAMainPageExtInfo : QQModelObject

@property (nonatomic, assign) NSInteger fileSize;

+ (instancetype)mainPageExtInfoWithParams:(NSDictionary *)params;

@end

@interface MAAppExtInfo : QQModelObject

@property (nonatomic, assign) BOOL isUnregisterApp;      // 腾讯主体是否未注册的app，ci启动会有提示
@property (nonatomic, assign) BOOL supportBlueBar;       // 退出时aio是否显示小蓝条
@property (nonatomic, assign) BOOL isRealTimeBattle;     // 是否为实时对战类型
@property (nonatomic, assign) BOOL isOpenGameJIT;        // 小游戏是否开启wk模式
@property (nonatomic, strong) NSString *gameCenterBundleName; // 游戏中心的bundleName
@property (nonatomic, strong) NSString *gameCenterURL; // 游戏中心的URL
@property (nonatomic, strong) NSString *gameCenterDomain; // 游戏中心的domain
@property (nonatomic, strong) NSString *gameCenterExtraParam; // 游戏中心的附加参数

@end

@interface MAFloatingBoxInfo : QQModelObject

@property (nonatomic, assign) BOOL boxDisplay;
@property (nonatomic, copy) NSString *boxIconURL;   // 浮点的icon
@property (nonatomic, copy) NSString *boxIconTitle; // 浮点的title
@property (nonatomic, copy) NSString *boxTitle;     // 点击弹出的浮层的标题
@property (nonatomic, copy) NSString *boxJumpURL;
@property (nonatomic, copy) NSString *boxCpJumpURL; // cp 任务跳转地址
@property (nonatomic, assign) BOOL needShowRedDot;
@property (nonatomic, assign) QMAFloatingBoxRedDotType redDotType;
@property (nonatomic, assign) NSTimeInterval displayDuration;
@property (nonatomic, copy) NSString *redDotInfo;

- (instancetype)initWithExtInfo:(NSArray <NS_COMM_Entry *>*)extInfo;

- (instancetype)initWithGameBox:(NS_MINI_INTERFACE_MiniGameBox *)gameBox;

@end

@class QMAGuildInfoModel;

@interface MAAppInfo : QQModelObject

typedef NS_ENUM(NSUInteger, QMAAppInfoSource) {    //appinfo被创建/读取时，是通过appid还是link？
    GetAppInfoByAppID = 1,
    GetAppInfoByLink = 2,
};

// 根据参数获取 MAAppInfo 返回空表示参数错误
- (instancetype)initWithParams:(NSDictionary *)params;

//慎用！！！通过类目类型校正引擎类型，仅用作缺乏引擎类型的弥补手段。
- (void)correctPkgType;

/**
 * @brief 使用appinfo前清理状态
 */
- (void)prepareForReUse;

// 是否是容器化小程序
- (BOOL)isContainer;

// 组装子包信息
- (void)assembleSubPkgs:(NSArray<trpc_mini_app_config_SubPkgInfo *> *)configSubPkgs;

// 是否是容器化小游戏
- (BOOL)isContainerGame;

// 是否被封禁
- (BOOL)isForbidden;

/// 渠道，默认值是QQ. 来源 mini_interface.proto中EMiniAppType
@property (nonatomic, assign) QMAChannelType channelType;
@property (nonatomic, strong) NSString *appID; // 必填
@property (nonatomic, strong) NSString *appName;
@property (nonatomic, strong) NSString *iconURL;
@property (nonatomic, strong) NSString *recommendSummary;
//当前小游戏，小程序.根目录
@property (nonatomic, strong) NSString *apkgUnpackPath;
@property (nonatomic, strong) NSString *jsSDKPath;
@property (nonatomic, strong) NSString *version;
@property (nonatomic, strong) NSString *appDesc;

/**
 枚举定义来源: [mini_meta_protocol.proto](https://git.code.oa.com/ApplicationDevelopment/qzone_camera_proj/blob/master/protocol/pb/mini_program/mini_meta_protocol.proto) 中的enum VersionType
 */
@property (nonatomic, assign) int32_t verType;
/**
 根据verType生成的描述字符串
 */
@property (nonatomic, readonly) NSString* verTypeName;
/**
 是否支持启动开发者工具
 */
@property (nonatomic, readonly) BOOL isSupportDevTool;
@property (nonatomic, readonly) NSString *envVersion;
@property (nonatomic, strong) NSString *baselibMiniVersion;
@property (nonatomic, strong) NSString *downloadURL;
@property (nonatomic, strong) NSArray <MASubPkgInfo *> *subPkgs;
@property (nonatomic, strong) MAFirstPageInfo *firstPageInfo;
@property (nonatomic, assign) QMABrandType brandType;    //商业范畴的类目，如果涉及引擎，请使用appBasicInfo.pkgType
@property (nonatomic, strong) MADebugInfo *debugInfo;
//预览版会有versionId来区分同一个appid下面的不同版本
@property (nonatomic, strong) NSString *versionId;
@property (nonatomic, strong) NSString *developer_company_name;
@property (nonatomic, strong) QMAAppGameInfoExt *gameInfoExt;

//小程序判断支持离线 （当前只有小游戏使用）
@property (nonatomic, assign) BOOL isSupportOffLine;

//域名控制
@property (nonatomic, strong) NSArray<NSString *> *requestDomain;
@property (nonatomic, strong) NSArray<NSString *> *downloadFileDomain;
@property (nonatomic, strong) NSArray<NSString *> *uploadFileDomain;
@property (nonatomic, strong) NSArray<NSString *> *socketDomain;
@property (nonatomic, strong) NSArray<NSString *> *businessDomain;
@property (nonatomic, strong) NSArray<NSString *> *udpSocketDomain;

// 插件功能页透传字典
@property (nonatomic, strong) NSDictionary *privateExtraData;

// 小程序跳转透传字段
@property (nonatomic, strong) NSString *extraData;
// 新增透传字段 先不缓存吧
@property (nonatomic, copy) NSString *extendData;

// api黑白名单
@property (nonatomic, strong) NSArray *whiteList;
@property (nonatomic, strong) NSArray *blackList;


// TODO: 接口协议文件放在 MiniAppSDK 外面 导致无法对 AppInfo 里面的数据进行读取权限配置
// 二级 Api 黑白名单 黑名单为 1 白名单为 0
// 二级集合架构 @{一级 Api: @{二级 Api : 权限}} 权限枚举定义 0：未知，1：有权限， -1： 没有权限 来源于：mini_interface.proto
@property (nonatomic, copy) NSDictionary<NSString *, NSDictionary<NSString *, NSNumber *> *>*secondaryApiPermission;

// 缓存相关
@property (nonatomic, strong) NSArray<MAAppDataCache *> *dataCacheList;

//小游戏扩展
@property (nonatomic, strong) NSString *appLogoURL;//小游戏 小程序的分类图标
@property (nonatomic, strong) NSString *appSubjectName;//小游戏 % 小程序
@property (nonatomic, strong) NSString *appPromptingContent;//警示内容

//shareTicket 不用持久化
@property (nonatomic, strong) NSString *shareTicket;

@property (nonatomic, assign) BOOL recommend; // 推荐应用
@property (nonatomic, strong) NSString *recommendIconURL; // 推荐图标的icon

@property (nonatomic, copy)   NSString *bubbleText;       // 气泡
@property (nonatomic, assign) NSInteger bubbleClickCount; // 气泡最大点击次数
@property (nonatomic, copy)   NSString *taskkey;          // 透传星火key
@property (nonatomic, copy)   NSString *launchLink;          // 透传启动link
@property (nonatomic, copy) NSDictionary *sourceTaskInfo; // 任务数据，A游戏做点击任务时透传给B游戏的任务信息

// 应用模式，内部app使用，用来隐藏右上角菜单、不弹getUserInfo弹框、隐藏用户下拉列表
@property (nonatomic, strong) MAAppMode *appMode;
@property (nonatomic, assign, readonly) BOOL isAppStore;

@property (nonatomic, strong) MAOperationInfo *opetationInfo;

@property (nonatomic, assign) NSInteger skipDomainCheck; // 跳过域名检查

@property (nonatomic, strong) NSArray *extConfigs;

@property (nonatomic, strong) QMAAppFixInfoExt* appNoCacheExt;

@property (nonatomic, strong) QMAAppBasicInfo *appBasicInfo;

@property (nonatomic, strong) MAAppInfoTemporaryInfo *tmpInfo; // 临时记录与pb协议无关的信息，不会落地保存，后续有增加在MAAppInfoTemporaryInfo增加属性

@property (nonatomic, strong) MAMainPageExtInfo *mainPageExtInfo;

@property (nonatomic, strong) MAAppExtInfo *extInfo; // 拓展信息，对应pb_extInfo

@property (nonatomic, strong) MAFloatingBoxInfo *boxInfo; // 游戏盒子信息

@property (nonatomic, weak) MABaseApplication *application; // 弱引用application

// 频道信息
@property (nonatomic, strong) QMAGuildInfoModel *guildInfoModel;

// 快捷服务扩展
@property (nonatomic, strong) NSString *schema;   // 小程序跳转链接
@property (nonatomic, strong) NSArray<NSString *> *loopIcons;  // 轮播展示的小程序图标

@property (nonatomic, strong) NSString *appJson;   // 容器化场景，需要动态下发appjson
@property (nonatomic, assign) BOOL isContainer;    // 标记是否是容器化场景

@property (nonatomic, assign) BOOL isOpenGameJIT;  // 小游戏是否开启wk模式,对世界子频道做特殊处理

// 审核状态相关
@property (nonatomic, assign) int32_t auditState; // 小程序审核状态
@property (nonatomic, assign) uint32_t releaseState; // 小程序发布状态：1 未发布，2 已发布，即有线上版本

// 通过哪种方式获取到的appinfo，如appid创建，或者link读取
@property (nonatomic, assign) QMAAppInfoSource sourceType;

@end


@interface MAMainPageUserInfo : NSObject

@property (nonatomic, assign) NSUInteger isPutTop;
@property (nonatomic, assign) NSUInteger isLike;
@property (nonatomic, assign) NSUInteger likeNum;

@end

@interface MANavigateRightInfo : NSObject

@property (nonatomic, assign) NSInteger actionCode;
@property (nonatomic, assign) NSInteger skipLocalCheck;
@property (nonatomic, strong) NSString *wording;

@end
